using System;
using System.Globalization;
using System.Threading;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using System.Xml;
using System.Reflection;

using Services;

using Utilities.Menu.UIElements;
using Services.Menu;
using Utilities.Menu;
using System.Collections.ObjectModel;
using BowMaster.Resources;

namespace BowMaster
{


    public class BowMasterGame : Microsoft.Xna.Framework.Game
    {
        public static int DEFAULT_SCR_WIDTH = 800;
        public static int DEFAULT_SCR_HEIGHT = 480;

        GraphicsDeviceManager graphics;
        SpriteBatch sprite_batch;

        public BowMasterGame()
        {
            graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";
            StateManager StateManager = new StateManager(this, graphics);
            this.Services.AddService(typeof(AStateManager), StateManager);

            Strings.Culture = CultureInfo.CurrentCulture;

            graphics.SupportedOrientations = DisplayOrientation.Portrait;
            graphics.PreferredBackBufferWidth = 480;
            graphics.PreferredBackBufferHeight = 800;

#if WINDOWS || XBOX
            //graphics.PreferredBackBufferWidth = 480;
            //graphics.PreferredBackBufferHeight = 800;
            graphics.IsFullScreen = false;
#else
            //graphics.PreferredBackBufferWidth = 480;
            //graphics.PreferredBackBufferHeight = 800;
            graphics.IsFullScreen = true;
#endif
            
            SoundTrackManager.Volume = 1.0f;
            StateManager.SelectIntroScreen();


            IsMouseVisible = true;
            IsFixedTimeStep = true;
            TargetElapsedTime = TimeSpan.FromSeconds(1.0 / 30.0);

            graphics.SynchronizeWithVerticalRetrace = true;
            //facciamo partire la colonna sonora




            //st_manager.Play();

        }

        protected override void Initialize()
        {
            sprite_batch = new SpriteBatch(GraphicsDevice);
            Services.AddService(typeof(SpriteBatch), sprite_batch);
            base.Initialize();
        }

        protected override void LoadContent()
        {
            base.LoadContent();
        }

        protected override void Dispose(bool disposing)
        {
            this.Services.RemoveService(typeof(SpriteBatch));
            base.Dispose(disposing);
        }

        internal void Draw()
        {
            this.Draw(new GameTime(TimeSpan.Zero, TimeSpan.Zero));
        }
    }
}
